package com.yunkeji.api.call.bo;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.ToString;

/** @author 老张 */
@Data
@ToString
public class RtcRoomCallBackBo {

    /** 事件组 @see EventGroup */
    @JsonProperty(value = "EventGroupId")
    private Integer EventGroupId;

    /** 事件类型 @see EventType */
    @JsonProperty(value = "EventType")
    private Integer EventType;
    /** 事件回调服务器向您的服务器发出回调请求的 Unix 时间戳，单位为毫秒 */
    @JsonProperty(value = "CallbackTs")
    private Long CallbackTs;

    @JsonProperty(value = "EventInfo")
    private EventInfo EventInfo;

    /**
     * 事件信息
     *
     * @author 老张
     */
    @Data
    public class EventInfo {
        /** 房间名（类型与客户端房间号类型一致） */
        @JsonProperty(value = "RoomId")
        private String RoomId;
        /** 事件发生的 Unix 时间戳，单位为秒（兼容保留） */
        @JsonProperty(value = "EventTs")
        private Long EventTs;
        /** 事件发生的 Unix 时间戳，单位为毫秒 */
        @JsonProperty(value = "EventMsTs")
        private Long EventMsTs;
        /** 用户 ID */
        @JsonProperty(value = "UserId")
        private String UserId;
        /** 角色类型（option：进退房时携带） */
        @JsonProperty(value = "Role")
        private Long Role;
        /** 具体原因 （option：进退房、停止媒体流时携带） */
        @JsonProperty(value = "Reason")
        private Long Reason;
    }

    /** @author 老张 角色类型（option：进退房时携带） */
    @AllArgsConstructor
    @Getter
    public enum Role {
        主播(20),
        观众(21);
        private Integer code;
    }

    /**
     * 事件组
     *
     * @author 老张
     */
    @AllArgsConstructor
    @Getter
    public enum EventGroup {
        房间事件组(1),
        媒体事件组(2);
        private Integer code;
    }

    /**
     * 事件类型
     *
     * @author 老张
     */
    @AllArgsConstructor
    @Getter
    public enum EventType {
        创建房间(101),
        解散房间(102),
        进入房间(103),
        退出房间(104),
        切换角色(105),
        开始推送视频数据(201),
        停止推送视频数据(202),
        开始推送音频数据(203),
        停止推送音频数据(204),
        开始推送辅路数据(205),
        停止推送辅路数据(206);
        private Integer code;
    }
}
